
## Задача 18 Тип 27 [№ 35485](https://inf-ege.sdamgia.ru/problem?id=35485)

В текстовом файле записан набор натуральных чисел, не превышающих 108. Гарантируется, что все числа различны. Из набора нужно выбрать три числа, сумма которых делится на 3. Какую наибольшую сумму можно при этом получить?

Входные данные.

[Файл A](https://inf-ege.sdamgia.ru/get_file?id=83829)
[Файл B](https://inf-ege.sdamgia.ru/get_file?id=83830)

Первая строка входного файла содержит целое число N  — общее количество чисел в наборе. Каждая из следующих N строк содержит одно число.

Пример входного файла:
```
4
5
8
14
```
11 В данном случае есть четыре подходящие тройки:
```
5, 8, 11 (сумма 24);
5, 8 14 (сумма 27);
5, 14 11 (сумма 30);
8, 14, 11 (сумма 33)
```
В ответе надо записать число 33.

Вам даны два входных файла (A и B), каждый из которых имеет описанную выше структуру. В ответе укажите два числа: сначала значение искомой суммы для файла A, затем для файла B.


### Решение

### способ 1

```python
f = open('27-B.txt')
n = int(f.readline())
a = list(map(int, f.readlines()))
a.sort()
b_0 = [i for i in a if i % 3 == 0][-3:]
b_1 = [i for i in a if i % 3 == 1][-3:]
b_2 = [i for i in a if i % 3 == 2][-3:]
print(max(sum(b_0), sum(b_1), sum(b_2), b_1[-1] + b_2[-1] + b_0[-1]))
```


### способ 2

```python
f = open('27-A.txt')
n = int(f.readline())
s = [int(i) for i in f]
m = [0]*3
mx = [0]*3
mX = 0
for i in range(n-2):
    m[s[i] % 3] = max(m[s[i] % 3], s[i])
    for j in range(3):
        mx[(s[i+1]+m[j]) % 3] = max(mx[(s[i+1]+m[j]) % 3], s[i+1]+m[j])
    mX = max(s[i+2]+mx[(3 - s[i+2] % 3) % 3], mX)
print(mX)
```